package 链表;

/**
 * @Author: biubiu0002
 * @Date: 2021-06-18 13:47
 **/
public class 删除链表倒数第n个节点 {
    public static void main(String[] args) {

    }
    public ListNode removeNthFromEnd(ListNode head, int n) {
        //链表都要加哑节点dummy
        ListNode dummy = new ListNode(-1);
        dummy.next=head;
        int length = 0,count=0;
        ListNode cur = dummy.next;
        //找到倒数第n+1个节点
        while(cur!=null){
            length++;
            cur=cur.next;
        }
        cur = dummy;
        while(cur!=null){
            //用下标计算
            // 0 1 2 3 4 5  删除倒数第2 找3
            // 0 1 2  删除倒数第2 找0
            if(count+n==length){
                // System.out.println(length);
                // System.out.println(count);
                cur.next=cur.next.next;
                break;
            }
            count++;
            cur=cur.next;
        }
        return dummy.next;







        // int count=0;

        // //一个长度为n的链表
        // // 3->2->1

        // ListNode lastNNode = new ListNode(-1);
        // ListNode lastCur = lastNNode;



        // if(head!=null){
        //     lastNNode = lastCur = head;
        // }

        // while(head!=null){
        //     if(count<=n){
        //         lastCur.next=head;
        //         lastCur = lastCur.next;

        //     }
        //     else if(count>n){
        //         lastNNode = lastNNode.next;
        //         ListNode p = lastNNode;
        //         while(p.next!=null){
        //             p.val=p.next.val;
        //         }
        //     }

        //     count++;
        //     head=head.next;

        // }
        // //一趟扫描找到了lastNNode的头结点


    }

}
